home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / rb / jlcd100.lzh / TNB_FSW / KBMS001.Lzh / KBMOUSE.s < prev    next >
Text File  |  1997-09-10  |  13KB  |  722 lines

  1.     .include    tnb.mac
  2.     .include    iocscall.mac
  3.     .include    doscall.mac
  4.  
  5. StartStatio:*******************常駐部
  6. SS:
  7.     jmp    init-SS(a4)
  8. head:
  9. HEAD1 = '*KBM'
  10. HEAD2 = 'S001'
  11.     .dc.l    HEAD1
  12.     .dc.l    HEAD2
  13.     .even
  14. st:
  15. MFP:    *=========================================
  16.     *    ($4C)[$0130]
  17.     *    受信パッファー割り込み
  18.     *
  19. MFP_    = $0130.w
  20. MFP__    = $004C
  21.     bclr.b    #4,IMRA            *キー入力割り込みマスククリア
  22.     movem.l    d0/d1/d7/a1,-(sp)
  23.     move.b    $00E8802F,d7
  24.     cmpi.b    #$5A+$80,d7
  25.     bne    MFP_L1
  26.     *=========== [かな]が離された!
  27.     tst.w    KeyMode
  28.     beq    MFP_ON            * KEY MODEだった
  29.     *------ KEY モードへ
  30.     clr.w    KeyMode
  31.     clr.b    ADDX
  32.     clr.b    ADDY
  33.     clr.b    ADDB
  34.     *----- LED を消す
  35. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  36.     bpl    @b
  37.     move.b    $0810.w,d0    * 本機の LED の状態
  38.     not.b    d0
  39.     ori.b    #%1000_0100,d0    * LED モード設定
  40.     move.b    d0,$00e8802f    * キーボードコマンド
  41. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  42.     bpl    @b
  43.     moveq    #$54,d0
  44.     move.b    d0,$00e8802f    * キーボードコマンド
  45.     bra    MFP_END        * 終わる
  46. MFP_ON:
  47.     *-------- MS モードへ
  48.     btst.b    #0,$80E.w
  49.     beq    MFP_L2            * SHIFT は押されていない
  50.     move.w    #1,KeyMode        * MS MODE に
  51. *    clr.l    $800.w
  52. *    clr.l    $804.w
  53. *    clr.l    $808.w
  54. *    clr.l    $80C.w
  55.     bra    MFP_END        * 終わる
  56.     *----- LED を消す
  57. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  58.     bpl    @b
  59.     move.b    #%1111_1111,d0    * LED モード設定
  60.     move.b    d0,$00e8802f    * キーボードコマンド
  61. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  62.     bpl    @b
  63.     bra    MFP_END        * 終わる
  64.  
  65. MFP_L1:
  66.     cmpi.b    #$5A,d7
  67.     bne    MFP_L2
  68.     *========== [かな]が押された
  69.     tst.w    KeyMode
  70.     beq    @f
  71.     *---- MS モード
  72.     bra    MFP_END
  73. @@:
  74.     btst.b    #0,$80E.w
  75.     beq    MFP_L2            * SHIFT は押されていない
  76.     bra    MFP_END        * 終わる
  77.  
  78. MFP_L2:
  79.     *============
  80.     tst.w    KeyMode
  81.     bne    MFP_L3            * MS MODE なので
  82. MFP_EE::
  83.     movem.l    (sp)+,d0/d1/d7/a1
  84.     bset.b    #4,IMRA            *キー入力割り込みマスクセット
  85. MFP_JMP:
  86.     jmp    0.l
  87.  
  88. MFP_END::
  89.     movem.l    (sp)+,d0/d1/d7/a1
  90.     bset.b    #4,IMRA            *キー入力割り込みマスクセット
  91.     rte
  92.  
  93. MFP_L3
  94.     *======== マウスエミュ
  95.     move.b    d7,d0
  96.     andi.b    #$7F,d0
  97.     cmpi.b    #$72,d0        * [OPT1]
  98.     beq    MFP_SFT
  99.     cmpi.b    #$2C,d0        * [C]
  100.     beq    MFP_SFT
  101.     cmpi.b    #$72,d0
  102.     beq    MFP_SFT
  103.     cmpi.b    #$55,d0        * [XF1]
  104.     beq    MFP_XF1
  105.     cmpi.b    #$56,d0        * [XF2]
  106.     beq    MFP_XF2
  107.     cmpi.b    #$2A,d0        * [Z]
  108.     beq    MFP_XF1
  109.     cmpi.b    #$2B,d0        * [X]
  110.     beq    MFP_XF2
  111.     cmpi.b    #$3B,d0        * カーソル
  112.     bcs    MFP_END
  113.     cmpi.b    #$3E+1,d0        * カーソル
  114.     bcs    MFP_CUR
  115.     move.b    d7,d0
  116.     bmi    MFP_EE
  117.     bra    MFP_END
  118.  
  119. MFP_SFT:
  120.     moveq    #5,d0
  121.     bra    @f
  122. MFP_XF2:
  123.     moveq    #7,d0
  124.     bra    @f
  125. MFP_XF1:
  126.     moveq    #6,d0
  127.     bra    @f
  128. MFP_CUR:
  129.     subi.b    #$3B,d0
  130. @@:
  131.     btst    #7,d7
  132.     bne    @f
  133.     *---- 押された
  134.     bset.b    d0,CURSFT
  135.     bra    1f
  136. @@:    *---- 離された
  137.     bclr.b    d0,CURSFT
  138. 1:
  139.     cmpi.b    #$72,d0            * OPT1
  140.     beq    MFP_EE
  141.     cmpi.b    #$2C,d0            * [C]
  142.     beq    MFP_EE
  143.     bra    MFP_END            * 終わる
  144.  
  145.  
  146. CURSFT:
  147.     .dc.b    0        *XF1 XF2 OP1 0 ↓ → ↑ ←
  148.     .even            * 55  56  70 0 3B 3C 3D 3E
  149.  
  150. ADDX:
  151.     .dc.b    0
  152. ADDY:
  153.     .dc.b    0
  154. ADDB:
  155.     .dc.b    0        *--LR:---- と入っている
  156.     .even
  157.  
  158.  
  159. IOCS5:    *=========================================
  160.     *    ($105)[$0414]
  161.     *    IOCS キー入力
  162.     *
  163. IOCS5_    = $0414.w
  164.     movem.l    d0/d1/d7/a1,-(sp)
  165.     move.b    d1,d7
  166.     cmpi.b    #$5A+$80,d7
  167.     bne    IO5_L1
  168.     *=========== [かな]が離された!
  169.     tst.w    KeyMode
  170.     beq    IO5_ON            * KEY MODEだった
  171.     *------ KEY モードへ
  172.     clr.w    KeyMode
  173.     clr.b    ADDX
  174.     clr.b    ADDY
  175.     clr.b    ADDB
  176.     *----- LED を消す
  177. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  178.     bpl    @b
  179.     move.b    $0810.w,d0    * 本機の LED の状態
  180.     not.b    d0
  181.     ori.b    #%1000_0100,d0    * LED モード設定
  182.     move.b    d0,$00e8802f    * キーボードコマンド
  183. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  184.     bpl    @b
  185.     moveq    #$54,d0
  186.     move.b    d0,$00e8802f    * キーボードコマンド
  187.     bra    IO5_END        * 終わる
  188. IO5_ON:
  189.     *-------- MS モードへ
  190.     btst.b    #0,$80E.w
  191.     beq    IO5_L2            * SHIFT は押されていない
  192.     move.w    #1,KeyMode        * MS MODE に
  193. *    clr.l    $800.w
  194. *    clr.l    $804.w
  195. *    clr.l    $808.w
  196. *    clr.l    $80C.w
  197.     bra    IO5_END        * 終わる
  198.     *----- LED を消す
  199. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  200.     bpl    @b
  201.     move.b    #%1111_1111,d0    * LED モード設定
  202.     move.b    d0,$00e8802f    * キーボードコマンド
  203. @@:    tst.b    $00e8802d    * データがCPU側にたまっていないか。
  204.     bpl    @b
  205.     bra    IO5_END        * 終わる
  206.  
  207. IO5_L1:
  208.     cmpi.b    #$5A,d7
  209.     bne    IO5_L2
  210.     *========== [かな]が押された
  211.     tst.w    KeyMode
  212.     beq    @f
  213.     *---- MS モード
  214.     bra    IO5_END
  215. @@:
  216.     btst.b    #0,$80E.w
  217.     beq    IO5_L2            * SHIFT は押されていない
  218.     bra    IO5_END        * 終わる
  219.  
  220. IO5_L2:
  221.     *============
  222.     tst.w    KeyMode
  223.     bne    IO5_L3            * MS MODE なので
  224. IO5_EE::
  225.     movem.l    (sp)+,d0/d1/d7/a1
  226. IOCS5_JMP:
  227.     jmp    0.l
  228.  
  229. IO5_END::
  230.     movem.l    (sp)+,d0/d1/d7/a1
  231.     rts
  232.  
  233. IO5_L3
  234.     *======== マウスエミュ
  235.     move.b    d7,d0
  236.     andi.b    #$7F,d0
  237.     cmpi.b    #$72,d0        * [OPT1]
  238.     beq    IO5_SFT
  239.     cmpi.b    #$2C,d0        * [C]
  240.     beq    IO5_SFT
  241.     cmpi.b    #$72,d0
  242.     beq    IO5_SFT
  243.     cmpi.b    #$55,d0        * [XF1]
  244.     beq    IO5_XF1
  245.     cmpi.b    #$56,d0        * [XF2]
  246.     beq    IO5_XF2
  247.     cmpi.b    #$2A,d0        * [Z]
  248.     beq    IO5_XF1
  249.     cmpi.b    #$2B,d0        * [X]
  250.     beq    IO5_XF2
  251.     cmpi.b    #$3B,d0        * カーソル
  252.     bcs    IO5_END
  253.     cmpi.b    #$3E+1,d0        * カーソル
  254.     bcs    IO5_CUR
  255.     move.b    d7,d0
  256.     bmi    IO5_EE
  257.     bra    IO5_END
  258.  
  259. IO5_SFT:
  260.     moveq    #5,d0
  261.     bra    @f
  262. IO5_XF2:
  263.     moveq    #7,d0
  264.     bra    @f
  265. IO5_XF1:
  266.     moveq    #6,d0
  267.     bra    @f
  268. IO5_CUR:
  269.     subi.b    #$3B,d0
  270. @@:
  271.     btst    #7,d7
  272.     bne    @f
  273.     *---- 押された
  274.     bset.b    d0,CURSFT
  275.     bra    1f
  276. @@:    *---- 離された
  277.     bclr.b    d0,CURSFT
  278. 1:
  279.     cmpi.b    #$72,d0            * OPT1
  280.     beq    IO5_EE
  281.     cmpi.b    #$2C,d0            * [C]
  282.     beq    IO5_EE
  283.     bra    IO5_END            * 終わる
  284.  
  285.  
  286. TIMC:    *=========================================
  287.     *    ($45)[$0114]
  288.     *    TIMC割り込み
  289.     *
  290. TIMC_    = $0114.w
  291. TIMC__    = $0045
  292.  
  293.     tst.w    KeyMode
  294.     beq    TIMC_L2
  295.     *-------
  296.     movem.l    d0/d1,-(sp)
  297.     *===== CURSFT からマウスの移動値を用意する
  298.     move.b    CURSFT(pc),d0
  299.     moveq    #3,d1
  300.     btst    #5,d0
  301.     beq    @f
  302.     moveq    #1,d1
  303. @@:    *---- 左
  304.     btst    #0,d0
  305.     beq    @f
  306.     sub.b    d1,ADDX
  307. @@:    *---- 上
  308.     btst    #1,d0
  309.     beq    @f
  310.     sub.b    d1,ADDY
  311. @@:    *---- 右
  312.     btst    #2,d0
  313.     beq    @f
  314.     add.b    d1,ADDX
  315. @@:    *---- 下
  316.     btst    #3,d0
  317.     beq    @f
  318.     add.b    d1,ADDY
  319. @@:    *---- XF2
  320.     btst    #6,d0
  321.     beq    @f
  322.     ori.b    #$01,ADDB        *--LR:----
  323. @@:    *---- XF1
  324.     btst    #7,d0
  325.     beq    @f
  326.     ori.b    #$02,ADDB        *--LR:----
  327. @@:
  328.     movem.l    (sp)+,d0/d1
  329.     *-------
  330.     subq.w    #1,TIMC_C1
  331.     bpl    TIMC_L2
  332.     *---------
  333.     move.l    d0,-(sp)
  334.     move.w    #20,TIMC_C1            * 50/100s ごと・・
  335.     tst.b    $00e8802d    *データがCPU側にたまっていないか。
  336.     bpl    9f
  337.     *move.b    tar810(pc),d0
  338.     *not.b    d0
  339.     *bset    #7,d0
  340.     move.b    #$FF,d0
  341.     *or.b    #$03,d0        * [かな][ローマ] LED 消灯
  342.     eori.b    #$FF,TIMC_C2
  343.     beq    @f
  344.     andi.b    #$FC,d0        * [かな][ローマ] LED 点灯
  345. @@:
  346.     move.b    d0,$00e8802f    * キーボードコマンド
  347.                 * [コード]LED は BG で点滅させる!
  348. 9:
  349.     move.l    (sp)+,d0
  350.  
  351. TIMC_L2:
  352. TIMC_JMP:
  353.     jmp    0.l
  354.  
  355.  
  356. MSD:    *---------------------------
  357.     *    ($24D)[$0934]    マウスエミュ
  358.     *    マウスデータ変更
  359.     *        a1にワークのアドレスがはいる
  360. MSD_    = $0934.w
  361.     movem.l    d0-d3/a0-a3,-(sp)
  362.  
  363.     lea    Data2(pc),a3
  364.  
  365.     move.b    ADDB(pc),d1
  366.     or.b    d1,(a1)
  367.     move.b    ADDX(pc),d2
  368.     add.b    d2,1(a1)        *X
  369.     move.b    ADDY(pc),d3
  370.     add.b    d3,2(a1)        *Y
  371.     clr.b    ADDX
  372.     clr.b    ADDY
  373.     clr.b    ADDB
  374.         ****** TEMCALLワーク書き込み
  375.     tst.b    3(a3)
  376.     beq    @f
  377.     clr.l    (a3)
  378. @@:    or.b    d1,(a3)
  379.     add.b    d2,1(a3)
  380.     add.b    d3,2(a3)
  381.  
  382.     movem.l    (sp)+,d0-d3/a0-a3
  383. MSD_JMP:
  384.     jmp    0.l
  385.  
  386. MS_SEL:    *-----------------------------
  387.     *    ($17B)[$05EC]
  388.     *    IOCS $7B MS_SEL
  389.     *
  390. MS_SEL_ = $05EC.w
  391.     cmpi.w    #$105,d1        *KEY B.
  392.     beq    MSS_LL
  393.  
  394. MS_SEL_JMP:
  395.     jmp    0.l
  396.  
  397. MSS_LL:
  398.     move.l    #'TEMC',d0
  399.     rts
  400.  
  401. MS_LIMIT:*-----------------------------
  402.     *    ($177)[$05DC]
  403.     *    IOCS $77 MS_LIMIT
  404.     *
  405. MS_LIMIT_ = $05DC.w
  406.     cmpi.l    #'TEMC',d1
  407.     beq    @f
  408. MS_LIMIT_JMP:
  409.     jmp    0.l
  410. @@:
  411.     cmpi.w    #5,d2        * KEY B.
  412.     beq    MSL_LL
  413.     bra    MS_LIMIT_JMP
  414.  
  415. MSL_LL:
  416.     movem.l    d1/a0,-(sp)
  417.     lea    Data2(pc),a0
  418.     moveq    #0,d0
  419.     btst    #0,(a0)
  420.     beq    @f
  421.     ori.l    #$FF000000,d0
  422. @@:    btst    #1,(a0)
  423.     beq    @f
  424.     ori.l    #$00FF0000,d0
  425. @@:    moveq    #0,d1
  426.     move.b    1(a0),d1
  427.     lsl.l    #8,d1
  428.     or.w    d1,d0
  429.     move.b    2(a0),d0
  430.     move.b    #-1,3(a0)
  431.     clr.b    1(a0)    *移動量はクリア
  432.     clr.b    2(a0)
  433.     *clr.l    (a0)
  434.     movem.l    (sp)+,d1/a0
  435.     rts
  436.  
  437. Data2:    .dc.l    0        *MS_LIMIT戻り値用
  438.             *読んだら +3.bを-1に!
  439.  
  440.     .even
  441.  
  442. KeyMode:
  443.     .dc.w    0
  444. TIMC_C1:
  445.     .dc.w    0
  446. TIMC_C2:
  447.     .dc.w    0
  448.  
  449. EndStatio:*******************常駐部
  450.  
  451.  
  452. MarkerChk:*----------------------------------------
  453.     *    a0 アドレス
  454.     *
  455.     *[戻り値] bne ちがう
  456.     *      beq あっている
  457.     cmpa.l    #$F0000000,a0
  458.     bcc    @f
  459.     cmp.l    #HEAD1,(a0)
  460.     bne    @f
  461.     cmp.l    #HEAD2,4(a0)
  462.     bne    @f
  463.     cmpa.l    a0,a0        *z=1
  464. @@:
  465.     rts
  466.  
  467.  
  468. InvChk:*----------------------------------------
  469.     *    a0.l==なら非常駐
  470.     *    a0.l!=なら常駐
  471.     movea.l    (a0),a0            *一つ前のポインタ
  472.     cmpa.l    #$F0000000,a0
  473.     bcc    IC1
  474.     cmp.l    #HEAD1,$0104(a0)
  475.     bne    @f
  476.     cmp.l    #HEAD2,$0108(a0)
  477.     bne    @f
  478.     adda.w    #$100,a0    **[SS]のポインタ
  479.     rts
  480. @@:                    **違う
  481.     tst.l    (a0)            *一つ前のポインタ
  482.     bne    InvChk            *0でない(上へ)
  483. IC1:    sub.l    a0,a0    *非常駐
  484.     rts
  485.  
  486.  
  487. AtoI:*----------------------------------------
  488.     *    a2 アドレス
  489.     *[戻り値] d0.l 数字
  490.     moveq    #0,d0
  491. @@:    move.b    (a2)+,d2
  492.     subi.b    #'0',d2
  493.     bcs    AIr
  494.     cmpi.b    #9,d2
  495.     bhi    AIr
  496.     andi.l    #$0000FF,d2
  497.     mulu    #10,d0
  498.     add.l    d2,d0
  499.     bra    @b
  500. AIr:    subq    #1,a2
  501.     rts
  502.  
  503.  
  504. init:*------------------------------------------------------------------
  505.     pea    LR1(pc)
  506.     DOS    _PRINT
  507.     addq.w    #4,sp
  508.     ** 常駐チェック **
  509.     suba.l    a1,a1
  510.     SUPER
  511.     movea.l    d0,a1
  512.     moveq    #0,d1
  513.     bsr    InvChk
  514.     movea.l    a0,a3        *常駐先頭アドレス
  515.  
  516.     movea.l    MSD_,a0
  517.     suba    #MSD-head,a0
  518.     bsr    MarkerChk
  519.     bne    @f
  520.     bset    #0,d1
  521. @@:
  522.     movea.l    MFP_,a0
  523.     suba    #MFP-head,a0
  524.     bsr    MarkerChk
  525.     bne    @f
  526.     bset    #1,d1
  527. @@:
  528.     movea.l    MS_SEL_,a0
  529.     suba    #MS_SEL-head,a0
  530.     bsr    MarkerChk
  531.     bne    @f
  532.     bset    #2,d1
  533. @@:
  534.     movea.l    MS_LIMIT_,a0
  535.     suba    #MS_LIMIT-head,a0
  536.     bsr    MarkerChk
  537.     bne    @f
  538.     bset    #3,d1
  539. @@:
  540.     movea.l    TIMC_,a0
  541.     suba    #TIMC-head,a0
  542.     bsr    MarkerChk
  543.     bne    @f
  544.     bset    #4,d1
  545. @@:
  546.     movea.l    IOCS5_,a0
  547.     suba    #IOCS5-head,a0
  548.     bsr    MarkerChk
  549.     bne    @f
  550.     bset    #5,d1
  551. @@:
  552.                 *d1に常駐状態
  553.     USER
  554.  
  555.     ** 常駐していたらそのデータを引用 **
  556.     move.l    a3,d0
  557.     beq    conl
  558.     move.w    KeyMode-SS(a3),KeyMode
  559. *    move.w    Port-SS(a3),Port
  560. *    move.w    TccL-SS(a3),TccL
  561. *    move.b    T25L-SS(a3),T25L
  562. conl:    ** コマンドラインチェック **
  563.     tst.b    (a2)+        *スキップ
  564. sw:    move.b    (a2)+,d0
  565.     beq    keep
  566.     cmpi.b    #' ',d0
  567.     beq    sw
  568.     cmpi.b    #$09,d0        *tab
  569.     beq    sw
  570.     cmpi.b    #'-',d0
  571.     beq    swc
  572.     cmpi.b    #'/',d0
  573.     beq    swc
  574. swe:    pea    LR6(pc)
  575.     bra    PE    *end
  576. swc:    **スイッチ判断
  577.     move.b    (a2)+,d0
  578.     beq    swe
  579.     cmpi.b    #'?',d0
  580.     beq    help
  581.     ori.b    #$20,d0    *小文字化!
  582.     cmpi.b    #'r',d0
  583.     beq    free
  584.     cmpi.b    #'p',d0
  585.     beq    pswc
  586. swcerr:    pea    LR7(pc)
  587.     bra    PE    *end
  588.  
  589. pswc:******************
  590.     bsr    AtoI
  591.     cmpi.w    #$0004,d0
  592.     bcc    swcerr
  593.     *move.w    d0,Port
  594.     bra    sw
  595.  
  596. help:******************
  597.     pea    LRH(pc)
  598.     bra    PE    *end
  599.  
  600.  
  601. keep:    ************************** 常駐させる
  602.     move.l    a3,d0
  603.     beq    @f
  604.         *既に常駐、設定変更
  605.  
  606.     move.w    KeyMode(pc),KeyMode-SS(a3)
  607. *    move.w    Port(pc),Port-SS(a3)
  608. *    move.w    TccL(pc),TccL-SS(a3)
  609. *    move.b    T25L(pc),T25L-SS(a3)
  610.     bsr    keepsub
  611.     pea    LR5(pc)
  612.     bra    PE    *end
  613. @@:
  614.     **セット
  615.     suba.l    a1,a1
  616.     SUPER
  617.     move.l    d0,a1
  618.  
  619.     move.l    MSD_,MSD_JMP+2
  620.      lea    MSD-SS(a4),a0
  621.      move.l    a0,MSD_
  622.     move.l    MFP_,MFP_JMP+2
  623.      lea    MFP-SS(a4),a0
  624.      move.l    a0,MFP_
  625.     move.l    MS_SEL_,MS_SEL_JMP+2
  626.      lea    MS_SEL-SS(a4),a0
  627.      move.l    a0,MS_SEL_
  628.     move.l    MS_LIMIT_,MS_LIMIT_JMP+2
  629.      lea    MS_LIMIT-SS(a4),a0
  630.      move.l    a0,MS_LIMIT_
  631.     move.l    TIMC_,d0
  632.      move.l    d0,TIMC_JMP+2
  633.      lea    TIMC-SS(a4),a0
  634.      move.l    a0,TIMC_
  635.     move.l    IOCS5_,d0
  636.      move.l    d0,IOCS5_JMP+2
  637.      lea    IOCS5-SS(a4),a0
  638.      move.l    a0,IOCS5_
  639.  
  640.     USER
  641.  
  642.     bsr    keepsub
  643.  
  644.     pea    LRKP(pc)
  645.     DOS    _PRINT
  646.     addq    #4,sp
  647.     clr.w    -(sp)
  648.     move.l    #EndStatio-StartStatio,-(sp)
  649.     DOS    _KEEPPR
  650.  
  651.     ****************
  652. keepsub:
  653.     IOCS    _MS_INIT
  654.     pea.l    LR2(pc)
  655.     DOS    _PRINT
  656.     addq    #4,sp
  657.  
  658.     rts
  659.  
  660. free:    *****************************常駐解除
  661.     move.l    a3,d0
  662.     bne    @f
  663.     pea    LR8(pc)        **非常駐
  664.     bra    PE    *end
  665.  
  666. @@:
  667.     cmpi.w    #$3F,d1
  668.     beq    @f
  669.     pea    LR4(pc)        **ベクタが占領
  670.     bra    PE    *end
  671. @@:
  672.     tst.w    KeyMode
  673.     beq    @f
  674.     pea    LRMM(pc)
  675.     bra    PE    *end
  676.  
  677. @@:
  678.     suba.l    a1,a1
  679.     SUPER
  680.     movea.l    d0,a1
  681.  
  682.     move.l    (MSD_JMP-SS)+2(a3),MSD_
  683.     move.l    (MFP_JMP-SS)+2(a3),MFP_
  684.     move.l    (MS_SEL_JMP-SS)+2(a3),MS_SEL_
  685.     move.l    (MS_LIMIT_JMP-SS)+2(a3),MS_LIMIT_
  686.     move.l    (TIMC_JMP-SS)+2(a3),TIMC_
  687.     move.l    (IOCS5_JMP-SS)+2(a3),IOCS5_
  688.     USER
  689.  
  690.     sub.l    #$00000F0,a3
  691.     move.l    a3,-(sp)
  692.     DOS    _MFREE
  693.     addq    #4,sp
  694.  
  695.     pea    LR3(pc)
  696. PE:    DOS    _PRINT
  697.     addq.w    #4,sp
  698.     DOS    _EXIT
  699.  
  700. LR2:    .dc.b    ' KEY BOURD で MOUSE エミュが出来ます。',$0d,$0a
  701.     .dc.b    '  [SHIFT]+[かな]で MOUSE エミュモードになります。',$0d,$0a,0
  702. LRKP:    .dc.b    ' 常駐しました。',$0d,$0a,0
  703. LR3:    .dc.b    ' 常駐解除しました。',$0d,$0a,0
  704. LR4:    .dc.b    ' ベクタが占領されています。',$0d,$0a,0
  705. LR5:    .dc.b    ' 設定を変更しました。',$0d,$0a,0
  706. LR5_:    .dc.b    ' 既に常駐しています。',$0d,$0a,0
  707. LR6:    .dc.b    ' コマンドラインが異常です。',$0d,$0a,0
  708. LR7:    .dc.b    ' スイッチが異常です。',$0d,$0a,0
  709. LR8:    .dc.b    ' 常駐していません。',$0d,$0a,0
  710. LRMM:    .dc.b    ' MOUSE エミュ中です。常駐解除出来ません。',$0d,$0a,0
  711. *LRMf:    .dc.b    ' チェック中他の割り込みを止めません。',$0d,$0a,0
  712. LRH:
  713.     .dc.b    $0d,$0a
  714.     .dc.b    '使用法:KBMOUSE.x [switch]',$0d,$0a
  715.     .dc.b    '    /R ・・・・ 常駐解除します。',$0d,$0a
  716.     .dc.b    $0d,$0a,0
  717.     .even
  718. LR1:    dc.b    'X68k KEY BOURD MOUSE EMULATER Version 0.01 Copyright 1997 TNB製作所',$0d,$0a,0
  719.     .even
  720.  
  721.  
  722.